package com.wzq.design.business.system.menu.entity;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.TableName;
import com.wzq.ssm.parent.base.entity.BaseTreeEntity;
import com.wzq.ssm.parent.tools.dataValid.DataValid;
import com.wzq.ssm.parent.tools.dataValid.DataValidEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;

/**
 * 菜单管理(BaseMenu)表实体类
 *
 * @author wangzhiqiang
 * @since 2024-02-25 11:23:43
 */
@EqualsAndHashCode(callSuper = true)
@Data
@TableName(value = "sys_menu")
@DataValidEntity(valids = {@DataValid(filed = "parentId", tableName = "sys_menu")})
public class SysMenu extends BaseTreeEntity<SysMenu> {
    /**
     * 菜单名称
     */
    private String name;
    /**
     * 菜单类型(menu:菜单 catalog:目录 extLink:外链 button:按钮)
     */
    private MenuTypeEnum type;
    /**
     * 路由路径(浏览器地址栏路径)
     */
    private String path;
    /**
     * 组件路径(vue页面完整路径，省略.vue后缀)
     */
    private String component;
    /**
     * 权限标识
     */
    private String perm;
    /**
     * 显示状态(1-显示;0-隐藏)
     */
    private Integer visible;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 菜单图标
     */
    private String icon;
    //跳转路径
    private String redirect;
    /**
     * 【目录】只有一个子路由是否始终显示(1:是 0:否)
     */
    private Integer alwaysShow;
    /**
     * 【菜单】是否开启页面缓存(1:是 0:否)
     */
    private Integer keepAlive;

    @Getter
    public enum MenuTypeEnum  {

        NULL(null, null),
        MENU("menu", "菜单"),
        CATALOG("catalog", "目录"),
        ROUTE("route", "路由"),
        EXTLINK("extLink", "外链"),
        BUTTON("button", "按钮");

        @EnumValue //  Mybatis-Plus 提供注解表示插入数据库时插入该值
        private String value;

        // @JsonValue //  表示对枚举序列化时返回此字段
        private String label;

        MenuTypeEnum(String  value, String label) {
            this.value = value;
            this.label = label;
        }

    }
}
